﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using SIIE_ERP.View;
using SIIE_ERP.BaseDatos;
using Elysium.Demo.Controls;

namespace Elysium.Demo.Informes
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class Seleccion_CRM_Pipeline : UserControl
    {
        private UsuarioActivo _sesion;
        private InventariosExistenciasViewModel _MiViewModel;

        private int Id_Moneda;
        private int Id_Tiempo;

        private int Id_Campana;
        private int Id_GrupoClientes;
        private int Id_ClienteProspecto;
        private int Id_Colaborador;

        public Seleccion_CRM_Pipeline(ref UsuarioActivo usuario, bool IsReportEmbedded = false)
        {
            this._sesion = usuario;
            Init();
            
            InitializeComponent();

            //Gráfico 
            Graficos.Pipeline_WinForm Mi_ReporteCompras = new Graficos.Pipeline_WinForm();
            Mi_ReporteCompras.ControlBox = false;
            Mi_ReporteCompras.TopLevel = false;
            Mi_WindowsFormContainer.Child = Mi_ReporteCompras;

            _MiViewModel = (InventariosExistenciasViewModel)this.DataContext;
            
            CargarCombos();
            CargarDatos();

            if (IsReportEmbedded)
                ButtonRegresar.Visibility = System.Windows.Visibility.Hidden;
        }

        private void CargarDatos()
        {
            if (PartidasDataGrid != null && _MiViewModel != null && Id_Moneda != -1)
            {
                DataTable Pipeline1 = SIIE_ERP.Codigo.CRM.Pipeline.Get_Pipeline1(_sesion, Id_Moneda, Id_Campana, Id_GrupoClientes, Id_ClienteProspecto, Id_Colaborador, Id_Tiempo);
                DataTable Pipeline2 = SIIE_ERP.Codigo.CRM.Pipeline.Get_Pipeline2(_sesion, Id_Moneda, Id_Campana, Id_GrupoClientes, Id_ClienteProspecto, Id_Colaborador, Id_Tiempo);

                if (Pipeline1 == null || Pipeline2 == null)
                    return;

                double AuxOportunidad = Double.Parse(Pipeline2.Rows[0]["Importe_Oportunidad"].ToString());
                double AuxVendido = Double.Parse(Pipeline2.Rows[0]["Importe_Vendido"].ToString());
                double AuxPresupuesto = Double.Parse(Pipeline2.Rows[0]["Presupuesto_Venta"].ToString());
                
                PartidasDataGrid.Items.Clear();
                PartidasDataGrid_Copy.Items.Clear();

                if (AuxPresupuesto == 0)
                {
                    PartidasDataGrid_Copy.Items.Add(new MiGrid2() { Etiqueta = "Importe en Oportunidad", Importe = AuxOportunidad.ToString("C"), VS = "100%" });
                    PartidasDataGrid_Copy.Items.Add(new MiGrid2() { Etiqueta = "Importe Vendido", Importe = AuxVendido.ToString("C"), VS = "100%" });
                    PartidasDataGrid_Copy.Items.Add(new MiGrid2() { Etiqueta = "Oportunidad + Venta", Importe = (AuxOportunidad + AuxVendido).ToString("C"), VS = "100%" });
                    PartidasDataGrid_Copy.Items.Add(new MiGrid2() { Etiqueta = "Presupuesto de Venta", Importe = AuxPresupuesto.ToString("C"), VS = "100%" });
                }
                else
                {
                    PartidasDataGrid_Copy.Items.Add(new MiGrid2() { Etiqueta = "Importe en Oportunidad", Importe = AuxOportunidad.ToString("C"), VS = Math.Round(((AuxOportunidad * 100) / AuxPresupuesto), 2).ToString() + "%" });
                    PartidasDataGrid_Copy.Items.Add(new MiGrid2() { Etiqueta = "Importe Vendido", Importe = AuxVendido.ToString("C"), VS = Math.Round(((AuxVendido * 100) / AuxPresupuesto), 2).ToString() + "%" });
                    PartidasDataGrid_Copy.Items.Add(new MiGrid2() { Etiqueta = "Oportunidad + Venta", Importe = (AuxOportunidad + AuxVendido).ToString("C"), VS = Math.Round((((AuxVendido + AuxOportunidad) * 100) / AuxPresupuesto), 2).ToString() + "%" });
                    PartidasDataGrid_Copy.Items.Add(new MiGrid2() { Etiqueta = "Presupuesto de Venta", Importe = AuxPresupuesto.ToString("C"), VS = "100%" });
                }

                ///////////////////////////////////////////////////

                DataTable DT = new DataTable();
                DT.Columns.Add("Grupo");
                DT.Columns.Add("Valor");

                PartidasDataGrid.Items.Clear();
                _MiViewModel.DatosGraph.Clear();

                DataRow dr1 = DT.NewRow();
                dr1["Grupo"] = "Oportunidad Identificada (1% a 19%)";
                dr1["Valor"] = Double.Parse(Pipeline1.Rows[0][7].ToString());
                DT.Rows.Add(dr1);
                PartidasDataGrid.Items.Add(new MiGrid1() { Probabilidad = "Oportunidad Identificada (1% a 19%)", IngresosEstimados = Double.Parse(Pipeline1.Rows[0][7].ToString()).ToString("C"), Cantidad = Int32.Parse(Pipeline1.Rows[0][0].ToString()).ToString() });
                _MiViewModel.DatosGraph.Add(new TestClass() { Grupo = "Oportunidad Identificada (1% a 19%)", Valor = Double.Parse(Pipeline1.Rows[0][7].ToString()) });

                DataRow dr2 = DT.NewRow();
                dr2["Grupo"] = "Se ha contactado (20% a 39%)";
                dr2["Valor"] = Double.Parse(Pipeline1.Rows[0][8].ToString());
                DT.Rows.Add(dr2);
                PartidasDataGrid.Items.Add(new MiGrid1() { Probabilidad = "Se ha contactado (20% a 39%)", IngresosEstimados = Double.Parse(Pipeline1.Rows[0][8].ToString()).ToString("C"), Cantidad = Int32.Parse(Pipeline1.Rows[0][1].ToString()).ToString() });
                _MiViewModel.DatosGraph.Add(new TestClass() { Grupo = "Se ha contactado (20% a 39%)", Valor = Double.Parse(Pipeline1.Rows[0][8].ToString()) });

                DataRow dr3 = DT.NewRow();
                dr3["Grupo"] = "Se ha recibido respuesta (40% a 59%)";
                dr3["Valor"] = Double.Parse(Pipeline1.Rows[0][9].ToString());
                DT.Rows.Add(dr3);
                PartidasDataGrid.Items.Add(new MiGrid1() { Probabilidad = "Se ha recibido respuesta (40% a 59%)", IngresosEstimados = Double.Parse(Pipeline1.Rows[0][9].ToString()).ToString("C"), Cantidad = Int32.Parse(Pipeline1.Rows[0][2].ToString()).ToString() });
                _MiViewModel.DatosGraph.Add(new TestClass() { Grupo = "Se ha recibido respuesta (40% a 59%)", Valor = Double.Parse(Pipeline1.Rows[0][9].ToString()) });

                DataRow dr4 = DT.NewRow();
                dr4["Grupo"] = "En proceso de cotización (60% a 79%)";
                dr4["Valor"] = Double.Parse(Pipeline1.Rows[0][10].ToString());
                DT.Rows.Add(dr4);
                PartidasDataGrid.Items.Add(new MiGrid1() { Probabilidad = "En proceso de cotización (60% a 79%)", IngresosEstimados = Double.Parse(Pipeline1.Rows[0][10].ToString()).ToString("C"), Cantidad = Int32.Parse(Pipeline1.Rows[0][3].ToString()).ToString() });
                _MiViewModel.DatosGraph.Add(new TestClass() { Grupo = "En proceso de cotización (60% a 79%)", Valor = Double.Parse(Pipeline1.Rows[0][10].ToString()) });

                DataRow dr5 = DT.NewRow();
                dr5["Grupo"] = "En revisión de cotización (80% a 89%)";
                dr5["Valor"] = Double.Parse(Pipeline1.Rows[0][11].ToString());
                DT.Rows.Add(dr5);
                PartidasDataGrid.Items.Add(new MiGrid1() { Probabilidad = "En revisión de cotización (80% a 89%)", IngresosEstimados = Double.Parse(Pipeline1.Rows[0][11].ToString()).ToString("C"), Cantidad = Int32.Parse(Pipeline1.Rows[0][4].ToString()).ToString() });
                _MiViewModel.DatosGraph.Add(new TestClass() { Grupo = "En revisión de cotización (80% a 89%)", Valor = Double.Parse(Pipeline1.Rows[0][11].ToString()) });

                DataRow dr6 = DT.NewRow();
                dr6["Grupo"] = "En negociación (90% a 94%)";
                dr6["Valor"] = Double.Parse(Pipeline1.Rows[0][12].ToString());
                DT.Rows.Add(dr6);
                PartidasDataGrid.Items.Add(new MiGrid1() { Probabilidad = "En negociación (90% a 94%)", IngresosEstimados = Double.Parse(Pipeline1.Rows[0][12].ToString()).ToString("C"), Cantidad = Int32.Parse(Pipeline1.Rows[0][5].ToString()).ToString() });
                _MiViewModel.DatosGraph.Add(new TestClass() { Grupo = "En negociación (90% a 94%)", Valor = Double.Parse(Pipeline1.Rows[0][12].ToString()) });

                DataRow dr7 = DT.NewRow();
                dr7["Grupo"] = "Muy cercano al cierre (90% a 95%)";
                dr7["Valor"] = Double.Parse(Pipeline1.Rows[0][13].ToString());
                DT.Rows.Add(dr7);
                PartidasDataGrid.Items.Add(new MiGrid1() { Probabilidad = "Muy cercano al cierre (90% a 95%)", IngresosEstimados = Double.Parse(Pipeline1.Rows[0][13].ToString()).ToString("C"), Cantidad = Int32.Parse(Pipeline1.Rows[0][6].ToString()).ToString() });
                _MiViewModel.DatosGraph.Add(new TestClass() { Grupo = "Muy cercano al cierre (90% a 95%)", Valor = Double.Parse(Pipeline1.Rows[0][13].ToString()) });

                ((Graficos.Pipeline_WinForm)Mi_WindowsFormContainer.Child).PonerInfo(DT);
            }
        }

        public void Init()
        {
            Id_Moneda = -1;
            Id_Tiempo = -1;
            Id_Campana = -1;
            Id_GrupoClientes = -1;
            Id_ClienteProspecto = -1;
            Id_Colaborador = -1;
        }

        public void CargarCombos()
        {
            ComboBoxUI.ComboMonedas(Combo_Moneda, this._sesion);
            ComboBoxUI.ComboTiempo_Pipeline(ref Combo_Tiempo);
            ComboBoxUI.ComboCampanas(ref Combo_Campana, this._sesion, IsForReport: true);
            ComboBoxUI.ComboGrupoClientes(ref Combo_GrupoCliente, this._sesion, IsForReport: true);
            ComboBoxUI.ComboColaborador(ref Combo_Colaborador, this._sesion, IsForReport: true);
            ComboBoxUI.ComboClientes_AutoComplete_Todo(ref Combo_ClientesAutoComplete, this._sesion, "");
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            Viewbox Aux = (Viewbox)this.Parent;
            Aux.Child = null;
            Aux.Child = new Menu_Informes(ref _sesion);           
        }

        private void ButtonRegresar_Click_1(object sender, RoutedEventArgs e)
        {
            Viewbox Aux = (Viewbox)this.Parent;
            Aux.Child = null;
            Aux.Child = new Menu_Informes(ref _sesion);  
        }
                
        private void Combo_ClientesAutoComplete_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            if (Combo_ClientesAutoComplete.SelectedItem != null)
                Id_ClienteProspecto = Int32.Parse(((CAutocomplete)Combo_ClientesAutoComplete.SelectedItem).Id);
            else
                Id_ClienteProspecto = -1;




            CargarDatos();
        }

        private void Combo_GrupoCliente_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            Id_GrupoClientes = Int32.Parse(((CItem)Combo_GrupoCliente.SelectedItem).Id);



            CargarDatos();
        }

        private void Combo_Colaborador_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            Id_Colaborador = Int32.Parse(((CItem)Combo_Colaborador.SelectedItem).Id);




            CargarDatos();
        }
                
        private void Button_DeseleccionCliente_Click_1(object sender, RoutedEventArgs e)
        {
            Combo_ClientesAutoComplete.SelectedItem = null;

            CargarDatos();
        }

        private void Combo_Moneda_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            Id_Moneda = Int32.Parse(((CItem)Combo_Moneda.SelectedItem).Id);

            CargarDatos();
        }

        private void Combo_Tiempo_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            Id_Tiempo = Int32.Parse(((CItem)Combo_Tiempo.SelectedItem).Id);

            CargarDatos();
        }

        private void Combo_Campana_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            Id_Campana = Int32.Parse(((CItem)Combo_Campana.SelectedItem).Id);

            CargarDatos();
        }

        class MiGrid1
        {
            public string Probabilidad { get; set; }
            public string Cantidad { get; set; }
            public string IngresosEstimados { get; set; }

            public MiGrid1() { }

            public MiGrid1(string Probabilidad, string Cantidad, string IngresosEstimados)
            {
                this.Probabilidad = Probabilidad;
                this.Cantidad = Cantidad;
                this.IngresosEstimados = IngresosEstimados;
            }
        }

        class MiGrid2
        {
            public string Etiqueta { get; set; }
            public string Importe { get; set; }
            public string VS { get; set; }

            public MiGrid2() { }

            public MiGrid2(string Etiqueta, string Importe, string VS)
            {
                this.Etiqueta = Etiqueta;
                this.Importe = Importe;
                this.VS = VS;
            }
        }

        private void PartidasDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string MiP = ((MiGrid1)(((DataGrid)sender).SelectedItem)).Probabilidad;
                        
            if (MiP.Equals("Oportunidad Identificada (1% a 19%)"))
            {
                Viewbox Aux = (Viewbox)this.Parent;
                Aux.Child = null;            
                Aux.Child = new Elysium.Demo.CRM.Transacciones.Oportunidad_Consulta(ref _sesion, 0);
            }
            else if (MiP.Equals("Se ha contactado (20% a 39%)"))
            {
                Viewbox Aux = (Viewbox)this.Parent;
                Aux.Child = null;            
                Aux.Child = new Elysium.Demo.CRM.Transacciones.Oportunidad_Consulta(ref _sesion, 20);
            }
            else if (MiP.Equals("Se ha recibido respuesta (40% a 59%)"))
            {
                Viewbox Aux = (Viewbox)this.Parent;
                Aux.Child = null;            
                Aux.Child = new Elysium.Demo.CRM.Transacciones.Oportunidad_Consulta(ref _sesion, 40);
            }
            else if (MiP.Equals("En proceso de cotización (60% a 79%)"))
            {
                Viewbox Aux = (Viewbox)this.Parent;
                Aux.Child = null;            
                Aux.Child = new Elysium.Demo.CRM.Transacciones.Oportunidad_Consulta(ref _sesion, 60);
            }
            else if (MiP.Equals("En revisión de cotización (80% a 89%)"))
            {
                Viewbox Aux = (Viewbox)this.Parent;
                Aux.Child = null;            
                Aux.Child = new Elysium.Demo.CRM.Transacciones.Oportunidad_Consulta(ref _sesion, 80);
            }
            else if (MiP.Equals("En negociación (90% a 94%)"))
            {
                Viewbox Aux = (Viewbox)this.Parent;
                Aux.Child = null;            
                Aux.Child = new Elysium.Demo.CRM.Transacciones.Oportunidad_Consulta(ref _sesion, 90);
            }
            else if (MiP.Equals("Muy cercano al cierre (90% a 95%)"))
            {
                Viewbox Aux = (Viewbox)this.Parent;
                Aux.Child = null;            
                Aux.Child = new Elysium.Demo.CRM.Transacciones.Oportunidad_Consulta(ref _sesion, 95);
            }
        }
    }
}

